package com.molichuxing.services.business.service;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.business.dto.request.create.UserBizCreateDto;
import com.molichuxing.services.business.dto.request.modify.DrivingLicenseBizModifyDto;
import com.molichuxing.services.business.dto.request.modify.UserBizModifyDto;
import com.molichuxing.services.business.dto.response.DrivingLicenseBizDto;
import com.molichuxing.services.business.dto.response.UserBizDto;
import com.molichuxing.services.business.dto.response.UserDetailBizDto;
import com.molichuxing.services.business.dto.response.UserPortraitBizDto;

import java.util.List;
import java.util.Map;

/**
 * @author liyg
 * 用户组合服务
 * 2019-08-06
 */
public interface UserBizService extends RootService {

    /**
     * 根据用户id获取用户信息 (包括身份证基本信息)
     *
     * @param userId
     * @return
     */
    UserBizDto getUser(Integer userId);

    /**
     * 根据用户身份证号获取用户信息 (包括身份证基本信息)
     *
     * @param idNumber
     * @return
     */
    UserBizDto getUser(String idNumber);

    /**
     * 根据用户身份证号获取用户信息 (包括身份证基本信息)
     *
     * @param phone
     * @return
     */
    UserBizDto getUserByPhone(String phone);

    /**
     * 根据用户身份证号获取用户信息 (包括身份证基本信息)
     *
     * @param openId
     * @return
     */
    UserBizDto getUserByOpenId(String openId);

    /**
     * 根据用户id获取用户信息 (包括身份证基本信息)
     *
     * @param userIds
     * @return
     */
    Map<Integer, UserBizDto> getUsers(List<Integer> userIds);

    /**
     * 根据用户id获取用户信息 (包括身份证基本信息和驾驶证信息)
     *
     * @param userId
     * @return
     */
    UserDetailBizDto getUserDetail(Integer userId);

    /**
     * 获取驾驶证列表
     *
     * @param map 参数
     *            key:name
     *            String 用户名 非必填
     *            key:phone
     *            String 用户手机号 非必填
     *            key:name
     *            String 驾驶证姓名 非必填
     *            key:status
     *            Integer 验证状态 非必填
     *            key:pageNum
     *            Integer 当前页
     *            key:pageSize
     *            Integer 每页显示条数
     * @return
     */
    Paged<DrivingLicenseBizDto> getDrivingLicenseList(Map<String, Object> map);

    /**
     * 添加用户信息
     *
     * @param createDto
     * @return
     */
    Boolean createUser(UserBizCreateDto createDto);

    /**
     * 修改用户个人信息（终端）
     *
     * @param modifyDto
     * @return
     */
    Boolean modifyUserTerminal(UserBizModifyDto modifyDto);

    /**
     * 修改用户个人信息
     *
     * @param modifyDto
     * @return
     */
    Boolean modifyUser(UserBizModifyDto modifyDto);

    /**
     * 修改用户地址
     *
     * @param modifyDto
     * @return
     */
    Boolean modifyUserAddress(UserBizModifyDto modifyDto);

    /**
     * 修改用户地址+邮箱
     *
     * @param modifyDto
     * @return
     */
    Boolean modifyUserEmail(UserBizModifyDto modifyDto);

    /**
     * 修改驾驶证审核状态
     *
     * @param modifyDto
     * @return
     */
    Boolean modifyVerifyStatus(DrivingLicenseBizModifyDto modifyDto);

    /**
     * 查询用户画像信息（性别分布、年龄分布）
     *
     * @param isPay 是否支付过
     * @return
     */
    public UserPortraitBizDto getUserPortraitVo(Boolean isPay);
}
